package banmuoi.util;

import java.io.IOException;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

public class WebUtil {
	/**
	 * Đọc attribute từ session object
	 * @param attribute tên attribute cần lấy
	 * @return giá trị của attribute
	 */
	public static Object getSession(String attribute) {
		return ServletActionContext.getRequest().getSession().getAttribute(attribute);
	}
	
	/**
	 * Ghi attribute vào session
	 * @param attribute là tên attribute
	 * @param value là giá trị của attribute
	 */
	public static void setSession(String attribute, Object value) {
		ServletActionContext.getRequest().getSession().setAttribute(attribute, value);
	}
	
	/**
	 * Xóa attribute khỏi tất cả các scope
	 * @param name là tên attribute cần xóa
	 */
	public static void removeAttribute(String name) {
		ServletActionContext.getRequest().removeAttribute(name);
		ServletActionContext.getRequest().getSession().removeAttribute(name);
		ServletActionContext.getServletContext().removeAttribute(name);
	}
	
	/**
	 * Lấy giá trị cookie gửi từ client
	 * @param name là tên cookie
	 * @return giá trị của cookie hoặc null nếu không tìm thấy cookie
	 */
	public static String getCookie(String name) {
		return getCookie(name, "");
	}
	
	/**
	 * Lấy giá trị cookie gửi từ client
	 * @param name là tên cookie
	 * @param defaultValue là giá trị mặc định khi không tìm thấy cookie
	 * @return giá trị của cookie hoặc giá trị mặc định nếu không tìm thấy cookie
	 */
	public static String getCookie(String name, String defaultValue) {
		Cookie[] cookies = ServletActionContext.getRequest().getCookies();
		for(Cookie cookie : cookies){
			if(cookie.getName().equals(name)){
				return cookie.getValue();
			}
		}
		return defaultValue;
	}
	
	/**
	 * Tạo và gửi cookie về client để lưu giữ
	 * @param name là tên cookie
	 * @param value là giá trị cookie
	 * @param expiry là thời hạng cookie tồn tại trên máy client
	 * @return Cookie đã được gửi về client
	 */
	public static Cookie addCookie(String name, String value, int expiry) {
		Cookie cookie = new Cookie(name, value);
		cookie.setMaxAge(expiry);
		ServletActionContext.getResponse().addCookie(cookie);
		return cookie;
	}
	
	
	/**
	 * Chuyển hường sang url khác
	 * @param url là url đích
	 * @throws IOException không tìm thấy url mới
	 */
	public static void sendRedirect(String url) throws IOException{
		HttpServletResponse resp =  ServletActionContext.getResponse();
		resp.sendRedirect(url);
	}
	
	
	/**
	 * Chuyển đổi đường dẫn logic sang vật lý
	 * @param path là đường đẫn logic
	 * @return đường dẫn vật lý
	 */
	public static String getRealPath(String path) {
		return ServletActionContext.getServletContext().getRealPath(path);
	}
	/**
	 * Lấy địa chỉ cơ sở chứa trang web hiện tại
	 * @return địa chỉ tuyệt đối
	 */
	public static String getBaseUrl() {
		String url = ServletActionContext.getRequest().getRequestURL().toString();
		return url.substring(0, 1 + url.lastIndexOf("/"));
	}
	
}
